package apralms

class Calculator {
	
	static getMTBF = { MFHBF, K2, Ke ->
		MFHBF * K2 * Ke		
	}
	
	static getMFHBF = { MTBF, K2, Ke ->
		MTBF / K2 / Ke		
	}
	
	/**
	 * 获取调整值
	 * 参数：原始值，分配余量
	 */
	static getAdjust = { original, spare ->
		original * (1 + spare)
	}
	
	/**
	 * 获取待分配值
	 * 参数：调整值，已知值列表
	 */
	static getReadyForAllot = { adjust, knownList ->
		def sum = 0
		knownList.each{ sum += (1/it) }
		1/(1/adjust - sum)				
	}
	
	/**
	 * 获取分配值 - 平均分配法
	 * 参数：待分配值，参与分配个数
	 */
	static getAllotByAverage = { readyValue, calCount ->
		readyValue * calCount		
	}
	
	/**
	 * 获取分配值 - 比例组合分配法
	 * 参数：待分配值，故障率合计，单品故障率
	 */
	static getAllotByScale = { readyValue, failureRatioSum, failRatio ->
		readyValue * failureRatioSum / failRatio
	}
	
	/**
	 * 获取分配值 - 评分分配法
	 * 参数：待分配值，系数
	 */
	static getAllotByGrade = { readyValue, factor ->
		readyValue / factor
	}
}
